package br.urca.controller;

import java.util.ArrayList;
import java.util.List;

import javax.inject.Inject;

import br.com.caelum.vraptor.Controller;
import br.com.caelum.vraptor.Path;
import br.com.caelum.vraptor.Result;
import br.urca.dao.DisciplinaDAO;
import br.urca.dao.OfertaDAO;
import br.urca.interceptor.InterceptResource;
import br.urca.model.Disciplina;
import br.urca.model.Oferta;
import br.urca.model.OfertaPK;
import br.urca.model.json.DisciplinaComOferta;

@Controller
@InterceptResource
public class OfertasController {
	
	public static final String MSG_SEM_DADOS = "Nada encontrado no servidor com os dados informados...";

	private OfertaDAO mDAO;
	private DisciplinaDAO mDisciplinaDAO;
	private Result result;

	public OfertasController() {
	}

	@Inject
	public OfertasController(OfertaDAO mDAO, DisciplinaDAO mDisciplinaDAO,
			Result result) {
		this.mDisciplinaDAO = mDisciplinaDAO;
		this.mDAO = mDAO;
		this.result = result;
	}

	@Path("/ofertas")
	public void index() {

	}

	@Path("/ofertas/lista")
	public void lista() {

	}
	
	public void lancarFrequencias(String oferta, String pedido) {
		if ((oferta != null) && (pedido != null)) {
			result.include("oferta",oferta)
				.include("pedido",pedido)
				.redirectTo(LancamentoFrequenciaController.class).index();
		}
	}

	public void lancarNotas(String oferta, String pedido) {
		if ((oferta != null) && (pedido != null)) {
			Oferta mOferta = new Oferta();
			mOferta.setId(new OfertaPK(oferta, pedido));
			result.redirectTo(LancamentoNotasController.class).buscar(mOferta);
		}
	}

	public void filtrar(String nome, String oferta) {
		
		if ((nome != null) && (oferta != null)) {
			List<Disciplina> mList = mDisciplinaDAO.buscarPorNome(nome);
			if ((mList != null) && (!mList.isEmpty())) {

				List<Oferta> mListOfertas = new ArrayList<Oferta>();
				List<DisciplinaComOferta> mListDisciplinaComOfertas = new ArrayList<DisciplinaComOferta>();
				mListOfertas.clear();

				for (Disciplina d : mList) {
					mListOfertas.addAll(mDAO.buscarPorOfertaDisciplina(oferta,
							d.getCodDisciplina()));
					for (Oferta o : mListOfertas) {
						mListDisciplinaComOfertas.add(new DisciplinaComOferta(
								o, d.getNomeDisciplina()));
					}
					mListOfertas.clear();
				}

				result.include("listaOferta", mListDisciplinaComOfertas);
				result.redirectTo(this).lista();
			} else {
				result.include("mensagem", MSG_SEM_DADOS);
				result.redirectTo(this).index();
			}

		} else {
			result.include("mensagem", MSG_SEM_DADOS);
			result.redirectTo(this).index();
		}
	}

}
